package io;

import java.io.*;

/**
 * 使用缓冲流完成文件复制
 * 缓冲流：java.io.BufferedInputStream和java.io.BufferedOutputStream
 * 他们是一对高级流，在流连接中的作用是提高读写效率
 * 缓冲流内部维护着一个字节数组，默认为8k，无论我们读写时用哪种方式，最终都会被缓冲流转化为块读写8k的进行来保证读写效率
 * 可以通过传参扩大字节数组
 */
public class CopyDemo2 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("ksolaunch.exe");
        BufferedInputStream fis1 = new BufferedInputStream(fis);//缓冲流安装在文件流上
        FileOutputStream fos = new FileOutputStream("wps.exe");
        BufferedOutputStream fos1 = new BufferedOutputStream(fos);
        int d;
        long start = System.currentTimeMillis();
        while((d = fis1.read())!=-1){//只要读出来的不是-1，即没到末尾，可以一直循环
            fos1.write(d);
        }
        long end = System.currentTimeMillis();
        System.out.println("复制完毕！耗时："+(end-start)+"ms");
        fis1.close();
        fos1.close();
        //没缓冲流：复制完毕！耗时：14499ms   有缓冲流：复制完毕！耗时：94ms
    }
}
